package br.edu.faculdadeprojecao.si.sisecon.manager;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.PersistenceException;

import br.edu.faculdadeprojecao.si.sisecon.model.Estudante;

public class EstudanteManager extends AbstractManager {

	private static final long serialVersionUID = 1L;
	
	public EstudanteManager salvar(final Estudante estudante) throws ManagerException {
		if (estudante != null) {
			try {
				if (estudante.isPersisted()) {
					super.save(estudante);
				} else {
					super.create(estudante);
				}
			} catch(PersistenceException e) {
				throw new ManagerException(e);
			}
		}
		
		return this;
	}
	
	public Estudante findByCpf(String cpf) throws ManagerException {
		EntityManager em = getEntityManager();
		Estudante estudante = null;
		try {
			estudante = (Estudante) em.createNamedQuery("estudante.findByCpf").setParameter("cpf", cpf).getSingleResult();
		} catch (NoResultException e) {
			//No result
		} catch (NonUniqueResultException e) {
			throw new ManagerException("Existe mais de um estudante cadastrado com o mesmo cpf ['"+cpf+"']", e);
		}
		return estudante;
	}
	
	public List<Estudante> list() {
		return super.findAll(Estudante.class);
	}
	
	public EstudanteManager commit() {
		super.flush();
		return this;
	}
	

}
